/*
 * Tencent is pleased to support the open source community by making wwsearch
 * available.
 *
 * Copyright (C) 2018-present Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * https://opensource.org/licenses/Apache-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 */

#pragma once

#include <functional>

namespace wwsearch {
class FuncScopeGuard {
 public:
  explicit FuncScopeGuard(std::function<void()> on_exit_scope)
      : on_exit_scope_(on_exit_scope), dismissed_(false) {}

  FuncScopeGuard(FuncScopeGuard const&) = delete;
  FuncScopeGuard& operator=(const FuncScopeGuard&) = delete;

  virtual ~FuncScopeGuard() {
    if (!dismissed_) {
      on_exit_scope_();
    }
  }

  void Dismiss() { dismissed_ = true; }

 private:
  std::function<void()> on_exit_scope_;
  bool dismissed_;
};
}  // namespace wwsearch
